home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c++-part2 / 13919 < prev    next >
Encoding:
Text File  |  1996-08-05  |  2.7 KB  |  97 lines

  1. Newsgroups: comp.lang.c++
  2. Path: walter.cray.com!glover
  3. From: glover@tngstar41.cray.com (Roger Glover)
  4. Subject: Re: HELP: Virtual output stream functions
  5. Message-ID: <1996Mar27.172852.6932@walter.cray.com>
  6. Originator: root@tngstar41
  7. Nntp-Posting-Host: tngstar41.cray.com
  8. Organization: Cray Research, Inc.
  9. References: <4jbko6$ivo@bigboote.WPI.EDU>
  10. Date: 27 Mar 96 17:28:52 CST
  11.  
  12.  
  13. In article <4jbko6$ivo@bigboote.WPI.EDU>, shura@cs.wpi.edu (Alexander Schelkin) writes:
  14. > I have a base class (Base) and several derived classes (Derived1, 
  15. > Derived2, ...). How can I implement a virtual operator<<?
  16. > I would like to be able to do the following:
  17. > If I have operator<< for Base, Derived1 and Derived2.
  18. > Base* p1 = new Derived1;
  19. > Base* p2 = new Derived2;
  20. > cout << "Derived 1 " << (*p1) << endl;
  21. > cout << "Derived 2 " << (*p2) << endl;
  22. >  
  23. > But in this case an output I got comes from Base class operator<<,
  24. > not from the derived classes.
  25. > Please answer me to shura@cs.wpi.edu
  26. > Thanks a lot,
  27. > Alexander Schelkin
  28.  
  29.  
  30. Try something like this:
  31.  
  32.  
  33. //  *********  UNTESTED  CODE  OFF  THE  TOP  OF  MY  HEAD  *********
  34.  
  35. class Base
  36.   {
  37.        .   // vertical ellipsis (replace with real code)
  38.        .   //
  39.  
  40.     private:
  41.       virtual ostream & display (ostream &);  // inserts members of invoking
  42.                                               // object into "ostream" object
  43.        .
  44.        .
  45.  
  46.       friend ostream & operator << (ostream & os, Base & b)
  47.         {
  48.           return b.display(os);
  49.         }
  50.   };
  51.   
  52. class Derived1 : public Base
  53.   {
  54.        .
  55.        .
  56.  
  57.     private:
  58.       ostream & display (ostream &);  // inserts members of invoking object
  59.                                       // into "ostream" object
  60.        .
  61.        .
  62.  
  63.       friend ostream & operator << (ostream &, Base &);
  64.                                       // need to declare friendship
  65.   };
  66.   
  67. class Derived2 : public Base
  68.   {
  69.        .
  70.        .
  71.  
  72.     private:
  73.       ostream & display (ostream &);  // inserts members of invoking object
  74.                                       // into "ostream" object
  75.        .
  76.        .
  77.  
  78.       friend ostream & operator << (ostream &, Base &);
  79.                                       // need to declare friendship
  80.   };
  81.  
  82. //  ****  END  OF  UNTESTED  CODE  OFF  THE  TOP  OF  MY  HEAD  ****
  83.  
  84.  
  85. ----------------------------------------------- Roger Glover
  86. XXXX\ \ / \ /XXX  \ / \ X   \ /\\\  X///X /\\\  Cray Research, Inc.
  87. / \ / \/ /\ / \ / \X /\ X  \  / \   X\  \ X     DISCLAIMER HAIKU:
  88. //X/  X\\\X //X/  X \ X X\\   / \   X/X \ X \\\   C R I may not
  89. / \   X///X / \/  X//XX X  \  / \   X  \\ X   \   Share these opinions with me
  90. / \   X   X /\\\/ X   X X///X /XXX/ X///X /XXX/   This is not my fault
  91. ----------------------------------------------- http://www.cray.com/education
  92.